﻿///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2023, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются 
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////

#Область ПрограммныйИнтерфейс

// Создает напоминание с произвольным временем или расписанием выполнения.
//
// Параметры:
//  Текст - Строка - текст напоминания;
//  ВремяСобытия - Дата - дата и время события, о котором надо напомнить.
//               - РасписаниеРегламентногоЗадания - расписание периодического события.
//               - Строка - имя реквизита Предмета, в котором содержится время наступления события.
//  ИнтервалДоСобытия - Число - время в секундах, за которое необходимо напомнить относительно времени события;
//  Предмет - ЛюбаяСсылка - предмет напоминания;
//  Идентификатор - Строка - уточняет предмет напоминания, например, "ДеньРождения".
//
Процедура УстановитьНапоминание(Текст, ВремяСобытия, ИнтервалДоСобытия = 0, Предмет = Неопределено, Идентификатор = Неопределено) Экспорт
	НапоминанияПользователяСлужебный.ПодключитьПроизвольноеНапоминание(
		Текст, ВремяСобытия, ИнтервалДоСобытия, Предмет, Идентификатор);
КонецПроцедуры

// Возвращает список напоминаний текущего пользователя.
//
// Параметры:
//  Предмет - ЛюбаяСсылка
//          - Массив - предмет или предметы напоминания.
//  Идентификатор - Строка - уточняет предмет напоминания, например, "ДеньРождения".
//
// Возвращаемое значение:
//    Массив - коллекция напоминаний в виде структур с полями, соответствующими полям регистра сведений НапоминанияПользователя.
//
Функция НайтиНапоминания(Знач Предмет = Неопределено, Идентификатор = Неопределено) Экспорт
	
	ТекстЗапроса =
	"ВЫБРАТЬ
	|	*
	|ИЗ
	|	РегистрСведений.НапоминанияПользователя КАК НапоминанияПользователя
	|ГДЕ
	|	НапоминанияПользователя.Пользователь = &Пользователь
	|	И &ОтборПоПредмету
	|	И &ОтборПоИдентификатору";
	
	ОтборПоПредмету = "ИСТИНА";
	Если ЗначениеЗаполнено(Предмет) Тогда
		ОтборПоПредмету = "НапоминанияПользователя.Источник В(&Предмет)";
	КонецЕсли;
	
	ОтборПоИдентификатору = "ИСТИНА";
	Если ЗначениеЗаполнено(Идентификатор) Тогда
		ОтборПоИдентификатору = "НапоминанияПользователя.Идентификатор = &Идентификатор";
	КонецЕсли;
	
	ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОтборПоПредмету", ОтборПоПредмету);
	ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОтборПоИдентификатору", ОтборПоИдентификатору);
	
	Запрос = Новый Запрос(ТекстЗапроса);
	Запрос.УстановитьПараметр("Пользователь", Пользователи.ТекущийПользователь());
	Запрос.УстановитьПараметр("Предмет", Предмет);
	Запрос.УстановитьПараметр("Идентификатор", Идентификатор);
	
	ТаблицаНапоминаний = Запрос.Выполнить().Выгрузить();
	ТаблицаНапоминаний.Сортировать("СрокНапоминания");
	
	Возврат ОбщегоНазначения.ТаблицаЗначенийВМассив(ТаблицаНапоминаний);
	
КонецФункции

// Удаляет напоминание пользователя.
//
// Параметры:
//  Напоминание - Структура - элемент коллекции, возвращаемый функцией НайтиНапоминания().
//
Процедура УдалитьНапоминание(Напоминание) Экспорт
	НапоминанияПользователяСлужебный.ОтключитьНапоминание(Напоминание, Ложь);
КонецПроцедуры

// Проверяет изменения реквизитов предметов, на которые есть пользовательская подписка,
// изменяет срок напоминания в случае необходимости.
//
// Параметры:
//  Предметы - Массив - предметы, по которым необходимо обновить сроки напоминаний.
// 
Процедура ОбновитьНапоминанияПоПредметам(Предметы) Экспорт
	
	НапоминанияПользователяСлужебный.ОбновитьНапоминанияПоПредметам(Предметы);
	
КонецПроцедуры

// Проверяет возможность использования напоминаний пользователя.
// 
// Возвращаемое значение:
//  Булево - используются напоминания пользователя
//
Функция ИспользуютсяНапоминанияПользователя() Экспорт
	
	Возврат ПолучитьФункциональнуюОпцию("ИспользоватьНапоминанияПользователя") 
		И ПравоДоступа("Изменение", Метаданные.РегистрыСведений.НапоминанияПользователя);
	
КонецФункции

// Обработчик одноименного события формы, размещает на форме элементы для настройки напоминания.
//
// Параметры:
//  Форма - ФормаКлиентскогоПриложения - форма, в которой необходимо разместить элементы настройки напоминания.
//  ПараметрыРазмещения - см. ПараметрыРазмещения
//
Процедура ПриСозданииНаСервере(Форма, ПараметрыРазмещения) Экспорт
	
	НапоминанияПользователяСлужебный.ПриСозданииНаСервере(Форма, ПараметрыРазмещения);
	
КонецПроцедуры

// Определяет параметры размещения на форме элементов настройки напоминания.
// 
// Возвращаемое значение:
//  Структура:
//   * Группа - ГруппаФормы - место размещения элементов настройки напоминания.
//   * ИмяРеквизитаСДатойСобытия - Строка - реквизит, относительно которого устанавливается время напоминания о событии.
//   * ИнтервалВремениНапоминания - Число - интервал времени напоминания по умолчанию, в секундах. По умолчанию - 0.
//   * ДобавлятьФлажок - Булево - если Истина, то рядом с полем ввода интервала времени будет добавлен флажок для 
//                                быстрого включения/отключения напоминания. Если Ложь, то флажок выводиться не будет,
//                                отключение напоминания будет доступно в списке выбора интервалов времени. Значение по
//                                умолчанию - Ложь.
//
Функция ПараметрыРазмещения() Экспорт
	
	Возврат НапоминанияПользователяСлужебный.ПараметрыРазмещения();
	
КонецФункции

// Обработчик одноименного события формы, обновляет на форме элементы, связанные с настройкой напоминания.
//
// Параметры:
//  Форма - ФормаКлиентскогоПриложения - форма, в которой необходимо разместить элементы настройки напоминания.
//  ТекущийОбъект       - СправочникОбъект
//                      - ДокументОбъект
//                      - ПланВидовХарактеристикОбъект
//                      - ПланСчетовОбъект
//                      - ПланВидовРасчетаОбъект
//                      - БизнесПроцессОбъект
//                      - ЗадачаОбъект
//                      - ПланОбменаОбъект - предмет напоминания.
//
Процедура ПриЧтенииНаСервере(Форма, ТекущийОбъект) Экспорт
	
	НапоминанияПользователяСлужебный.ПриЧтенииНаСервере(Форма, ТекущийОбъект);
	
КонецПроцедуры

// Обработчик одноименного события формы, устанавливает напоминание по предмету при записи объекта в форме.
//
// Параметры:
//   Форма - ФормаКлиентскогоПриложения - форма, в которой размещены элементы настройки напоминания.
//   Отказ - Булево - признак отказа от записи.
//   ТекущийОбъект  - СправочникОбъект
//                  - ДокументОбъект
//                  - ПланВидовХарактеристикОбъект
//                  - ПланСчетовОбъект
//                  - ПланВидовРасчетаОбъект
//                  - БизнесПроцессОбъект
//                  - ЗадачаОбъект
//                  - ПланОбменаОбъект - предмет напоминания.
//   ПараметрыЗаписи - Структура
//   ТекстНапоминания - Строка - текст устанавливаемого напоминания. Если не заполнен, то используется представление
//                               предмета напоминания.
//  
Процедура ПриЗаписиНаСервере(Форма, Отказ, ТекущийОбъект, ПараметрыЗаписи, ТекстНапоминания = "") Экспорт
	
	НапоминанияПользователяСлужебный.ПриЗаписиНаСервере(Форма, Отказ, ТекущийОбъект, ПараметрыЗаписи, ТекстНапоминания);
	
КонецПроцедуры

#КонецОбласти
